import VueI18n from "src";
import Vue, { ComponentOptions } from "vue";


export const mixinOptions: ComponentOptions<Vue> = {
    beforeCreate() {
        // 从 根实例上的 $options， 即 new Vue 时传入的参数取 i18n 实例。
        const options: any = this.$options
        
        if(options.i18n && options.i18n instanceof VueI18n) {
            // 先给根实例 挂 _i18n
            this._i18n = options.i18n
        } else {
            // 非根实例 从根实例上取 _i18n
            this._i18n = this.$root._i18n
        }
    },

    // TODO: 现在是收集所有组件了，应该只收集真正使用了 $t() 的组件。
    beforeMount(this: Vue) {
        
        (this as Vue)._i18n && this._i18n.subscribeDataChanging(this)
    },

    beforeDestroy(this: Vue) {
        if (!this._i18n) return
        this.$nextTick(() => {
            this._i18n.unsubscribeDataChanging(this)
        })
    }
}